package top.minishow.pdf.utils;

import cn.hutool.crypto.SecureUtil;

import java.util.Arrays;
import java.util.List;

public class Md5Test {
    private static List<String> start = Arrays.asList("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
    private static List<String> end = Arrays.asList("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "_", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z");
    private static boolean flag = true;
    public static void main(String[] args) {
        final String md5 = SecureUtil.md5("hwn521");
        System.out.println(md5);
        //
        String password = "2d4b30a75d0245f43c5ef97a4fc1b13b";
        int length = 6;
        if (length > 10) {
            return;
        }
      get(length, password);

    }

    public static void get(int length, String password) {
        for (int i = 0; i < start.size(); i++) {
            int finalI = i;
            final Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    String startstr = start.get(finalI);
                    getStr(startstr, length - 1, password);
                }
            });
            thread.start();
        }
    }

    public static void getStr(String start, int length, String password) {
        // 有多长的length就要多少的字符串
        if (flag && length > 0) {
            String temp = null;
            for (int i = 0; i < end.size(); i++) {
                temp = start + end.get(i);
                if (length == 1) {
                    System.out.println(temp);
//                    String md5 = SecureUtil.md5(temp);
                    if (password.equals(temp)) {
                        flag = false;
                        System.out.println(temp);
                    }
                } else {
                    getStr(temp, length - 1, password);
                }
            }
        }
    }
}
